package com.miplus.ccrm.core.service.strategy;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.miplus.ccrm.common.CmdResVo;
import com.miplus.ccrm.common.JPubUtils;
import com.miplus.ccrm.core.controller.vo.strategy.*;
import com.miplus.ccrm.core.pojo.*;
import com.miplus.ccrm.core.mapper.CpCalllistTriggerQuerylinkMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Consumer;

/**
* @author pc
* @description 针对表【cp_calllist_trigger_querylink(触发器规则表)】的数据库操作Service实现
* @createDate 2024-03-22 16:38:19
*/
@Slf4j
@Service
public class CpCalllistTriggerQuerylinkServiceImpl extends MPJBaseServiceImpl<CpCalllistTriggerQuerylinkMapper, CpCalllistTriggerQuerylink>
    implements CpCalllistTriggerQuerylinkService{

    @Override
    public IPage<TriglinkResVo> queryRuleListTrigger(TriglinkReqVo paras)
    {
        return selectJoinListPage(new Page<>(paras.getPageNum(), paras.getPageSize()),
                TriglinkResVo.class,
                new MPJLambdaWrapper<CpCalllistTriggerQuerylink>()
                        .selectAs("fun_getnames('ACTIVITY.QUERY.METHOD',t.method)",TriglinkResVo::getMethoddesc)
                        .selectAs(CfgActivityQuerydatacol::getColdesc,TriglinkResVo::getColdesc)
                        .selectAs("fun_getnames('ACTIVITY.QUERY.INTYPE',cqd.inputtype)",TriglinkResVo::getInputtypedsc)
                        .leftJoin(CfgActivityQuerydatacol.class,"cqd",CfgActivityQuerydatacol::getId, CfgActivityQuerylink::getQuyid)
                        .selectAll(CpCalllistTriggerQuerylink.class)
                        .select(CfgActivityQuerydatacol::getInputtype,CfgActivityQuerydatacol::getSrcdicid)
                        .eq("triggerid",paras.getTriggerid())
                        .eq("type",paras.getType())
                        .orderByAsc("queryruleid")
        );
    }

    @Override
    public CmdResVo updateQueryRuleTrigger(TriglinkEditVo paras)
    {
        CpCalllistTriggerQuerylink def=new CpCalllistTriggerQuerylink();
        BeanUtils.copyProperties(paras,def);
        def.setQuyid(paras.getQuyid());
        int ret=baseMapper.updateById(def);
        return new CmdResVo(ret,def.getQueryruleid().toString());
    }

    @Override
    public CmdResVo insertQueryRuleTrigger(TriglinkEditVo paras)
    {
        CpCalllistTriggerQuerylink def=new CpCalllistTriggerQuerylink();
        BeanUtils.copyProperties(paras,def);
        def.setQuyid(paras.getQuyid());
        int ret=baseMapper.insert(def);
        return new CmdResVo(ret,def.getQueryruleid().toString());
    }

    @Override
    public CmdResVo deleteQueryRuleTrigger(int id)
    {
        int ret=baseMapper.deleteById(id);
        return new CmdResVo(ret,Integer.toString(id));
    }

    @Override
    public CmdResVo saveCustRule(int triggerid,String sql)
    {
        int ret=baseMapper.delete(new MPJLambdaWrapper<CpCalllistTriggerQuerylink>()
                .eq(CpCalllistTriggerQuerylink::getType,3)
                .eq(CpCalllistTriggerQuerylink::getTriggerid,triggerid)
        );
        if(JPubUtils.IsNotEmpty(sql)) {
            CpCalllistTriggerQuerylink querylink=new CpCalllistTriggerQuerylink();
            querylink.setName("custom");
            querylink.setStatus(1);
            querylink.setTriggerid(triggerid);
            querylink.setType(3); //定制条件
            querylink.setTsql(sql);
            baseMapper.insert(querylink);
        }
        return new CmdResVo(ret);
    }

    @Override
    public String getCustRuleSql(int triggerid)
    {
        String retval="";
        CpCalllistTriggerQuerylink querylink=baseMapper.selectJoinOne(CpCalllistTriggerQuerylink.class,
                new MPJLambdaWrapper<CpCalllistTriggerQuerylink>()
                        .eq(CpCalllistTriggerQuerylink::getType,3)
                        .eq(CpCalllistTriggerQuerylink::getTriggerid,triggerid)
        );
        if(querylink!=null){
            retval=querylink.getTsql();
        }
        return retval;
    }

    @Override
    public List<ActDataColVo> quyDataColList(Integer triggerid,Integer type)
    {
        return selectJoinList(ActDataColVo.class,
                new MPJLambdaWrapper<CpCalllistTriggerQuerylink>()
                        .leftJoin(CfgActivityQuerydatacol.class,"dl",CfgActivityQuerydatacol::getId,CpCalllistTriggerQuerylink::getQuyid)
                        .select(CpCalllistTriggerQuerylink::getType,CpCalllistTriggerQuerylink::getMethod,CpCalllistTriggerQuerylink::getColvalue,
                                CpCalllistTriggerQuerylink::getTsql)
                        .select(CfgActivityQuerydatacol::getColname,CfgActivityQuerydatacol::getTablename,CfgActivityQuerydatacol::getTableas,
                                CfgActivityQuerydatacol::getDatatype,CfgActivityQuerydatacol::getSplicecol,CfgActivityQuerydatacol::getInputtype,
                                CfgActivityQuerydatacol::getSrcdicid,CfgActivityQuerydatacol::getColbefore,CfgActivityQuerydatacol::getColafter)
                        .eq(CpCalllistTriggerQuerylink::getType,type)
                        .eq(CpCalllistTriggerQuerylink::getStatus,1)
                        .eq(CpCalllistTriggerQuerylink::getTriggerid,triggerid)
        );
    }

    @Override
    public MPJLambdaWrapper buildQueryWrapper(MPJLambdaWrapper<FiCreditcases> quyWrapper,Integer triggerid)
    {
        List<ActDataColVo> dataColVoList=quyDataColList(triggerid,1);
        if(JPubUtils.IsNotEmpty(dataColVoList)){
            log.info("buildQueryWrapper({})=and.count={}",triggerid,dataColVoList.size());
            for(ActDataColVo colVo : dataColVoList){
                if(JPubUtils.IsEqual(colVo.getMethod(),"=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.eq(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.eq(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.eq(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),">=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.ge(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.ge(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.ge(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"<=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.le(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.le(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.le(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),">")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.gt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.gt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.gt(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"<")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.lt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.lt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.lt(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"!=")){
                    quyWrapper.ne(colVo.getSplicecol(),colVo.getColvalue());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"is null")){
                    quyWrapper.isNull(colVo.getSplicecol());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"is not null")){
                    quyWrapper.isNotNull(colVo.getSplicecol());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"like")){
                    quyWrapper.like(colVo.getSplicecol(),colVo.getColvalue());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"in")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.in(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.in(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"not in")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.notIn(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.notIn(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                    }
                }
            }

            dataColVoList.clear();
        }

        final List<ActDataColVo> dataList2=quyDataColList(triggerid,2);
        if(JPubUtils.IsNotEmpty(dataList2)){
            log.info("buildQueryWrapper({})=or.count={}",triggerid,dataList2.size());
            Consumer<MPJLambdaWrapper<FiCreditcases>> wrapperConsumer = orWrapper -> {
                orWrapper.apply("1=0");
                for (ActDataColVo colVo : dataList2) {
                    if (JPubUtils.IsEqual(colVo.getMethod(), "=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().eq(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().eq(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().eq(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), ">=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().ge(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().ge(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().ge(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "<=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().le(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().le(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), ">")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().gt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().gt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().gt(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "<")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().lt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().lt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().lt(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "!=")) {
                        orWrapper.or().ne(colVo.getSplicecol(), colVo.getColvalue());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "is null")) {
                        orWrapper.or().isNull(colVo.getSplicecol());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "is not null")) {
                        orWrapper.or().isNotNull(colVo.getSplicecol());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "like")) {
                        orWrapper.or().like(colVo.getSplicecol(), colVo.getColvalue());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "in")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().in(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().in(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "not in")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().notIn(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().notIn(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                        }
                    }
                }
            };
            quyWrapper.and(wrapperConsumer);

            dataList2.clear();
        }

        List<ActDataColVo> dataList3=quyDataColList(triggerid,3);
        if(JPubUtils.IsNotEmpty(dataList3)){
            ActDataColVo colVo=dataList3.get(0);
            log.info("buildQueryWrapper({})=last sql:{}",triggerid,colVo.getTsql());
            if(JPubUtils.IsNotEmpty(colVo.getTsql())) {
                quyWrapper.last(colVo.getTsql());
            }
            dataList3.clear();
        }

        return quyWrapper;
    }

    @Override
    public MPJLambdaWrapper<TRecorder> buildQueryByQmWrapper(MPJLambdaWrapper<TRecorder> quyWrapper,Integer triggerid)
    {
        List<ActDataColVo> dataColVoList=quyDataColList(triggerid,1);
        if(JPubUtils.IsNotEmpty(dataColVoList)){
            log.info("buildQueryWrapper({})=and.count={}",triggerid,dataColVoList.size());
            for(ActDataColVo colVo : dataColVoList){
                if(JPubUtils.IsEqual(colVo.getMethod(),"=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.eq(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.eq(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.eq(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),">=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.ge(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.ge(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.ge(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"<=")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.le(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.le(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.le(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),">")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.gt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.gt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.gt(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"<")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.lt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                    }
                    else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                        quyWrapper.lt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.lt(colVo.getSplicecol(), getParaValue(colVo));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"!=")){
                    quyWrapper.ne(colVo.getSplicecol(),colVo.getColvalue());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"is null")){
                    quyWrapper.isNull(colVo.getSplicecol());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"is not null")){
                    quyWrapper.isNotNull(colVo.getSplicecol());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"like")){
                    quyWrapper.like(colVo.getSplicecol(),colVo.getColvalue());
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"in")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.in(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.in(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                    }
                }
                else if(JPubUtils.IsEqual(colVo.getMethod(),"not in")){
                    if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                        quyWrapper.notIn(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                    }
                    else{
                        quyWrapper.notIn(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                    }
                }
            }

            dataColVoList.clear();
        }

        final List<ActDataColVo> dataList2=quyDataColList(triggerid,2);
        if(JPubUtils.IsNotEmpty(dataList2)){
            log.info("buildQueryWrapper({})=or.count={}",triggerid,dataList2.size());
            Consumer<MPJLambdaWrapper<TRecorder>> wrapperConsumer = orWrapper -> {
                orWrapper.apply("1=0");
                for (ActDataColVo colVo : dataList2) {
                    if (JPubUtils.IsEqual(colVo.getMethod(), "=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().eq(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().eq(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().eq(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), ">=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().ge(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().ge(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().ge(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "<=")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().le(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().le(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), ">")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().gt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().gt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().gt(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "<")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().lt(colVo.getSplicecol(), JPubUtils.StringToInt(colVo.getColvalue()));
                        }
                        else if(JPubUtils.IsEqual(colVo.getDatatype(),"date")) {
                            orWrapper.or().lt(colVo.getSplicecol(), JPubUtils.StringToDate(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().lt(colVo.getSplicecol(), getParaValue(colVo));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "!=")) {
                        orWrapper.or().ne(colVo.getSplicecol(), colVo.getColvalue());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "is null")) {
                        orWrapper.or().isNull(colVo.getSplicecol());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "is not null")) {
                        orWrapper.or().isNotNull(colVo.getSplicecol());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "like")) {
                        orWrapper.or().like(colVo.getSplicecol(), colVo.getColvalue());
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "in")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().in(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().in(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                        }
                    } else if (JPubUtils.IsEqual(colVo.getMethod(), "not in")) {
                        if(JPubUtils.IsEqual(colVo.getDatatype(),"number")) {
                            orWrapper.or().notIn(colVo.getSplicecol(), getValListAsInt(colVo.getColvalue()));
                        }
                        else{
                            orWrapper.or().notIn(colVo.getSplicecol(), getValList(colVo.getColvalue()));
                        }
                    }
                }
            };
            quyWrapper.and(wrapperConsumer);

            dataList2.clear();
        }

        List<ActDataColVo> dataList3=quyDataColList(triggerid,3);
        if(JPubUtils.IsNotEmpty(dataList3)){
            ActDataColVo colVo=dataList3.get(0);
            log.info("buildQueryWrapper({})=last sql:{}",triggerid,colVo.getTsql());
            if(JPubUtils.IsNotEmpty(colVo.getTsql())) {
                quyWrapper.last(colVo.getTsql());
            }
            dataList3.clear();
        }

        return quyWrapper;
    }

    private List<Integer> getValListAsInt(String sp)
    {
        List<Integer> retArr=new ArrayList<>();
        String[] arr=sp.split(",");
        for(String s :  arr){
            retArr.add(Integer.parseInt(s));
        }
        return retArr;
    }

    private List<String> getValList(String sp)
    {
        List<String> retArr=new ArrayList<>();
        String[] arr=sp.split(",");
        for(String s :  arr){
            retArr.add(s);
        }
        return retArr;
    }

    private String getParaValue(ActDataColVo colVo)
    {
        String s=colVo.getColvalue();
        if(JPubUtils.IsNotEmpty(colVo.getColbefore())){
            s=colVo.getColbefore()+s;
        }
        if(JPubUtils.IsNotEmpty(colVo.getColafter())){
            s+=colVo.getColafter();
        }
        return s;
    }
}




